package Recolector;

import java.net.URL;
import java.util.LinkedList;

/**
 * Clase que implementa una Cola (internamente una LinkedList) en la que
 * los recolectores de enlaces van a meter las URLs y de la que los recolectores
 * de temas van a sacarlas.
 * @author Mikel&Igor
 */
public class ColaURL {
    // Cola de URLs
    private static LinkedList<URL> cola = new LinkedList<URL>();

    /**
     * Función que hace de interfaz de entrada para la cola.
     * Sincronizada para evitar que varios recolectores de enlaces introduzcan
     * a la vez.
     * @param u La URL a introducir en la cola (al final)
     * @return true si se ha podido añadir y false en caso contrario.
     */
    public static boolean meter(URL u) {
        synchronized (ColaURL.class) {
            System.out.println("\t>> ("+numURLs()+") Introducido en cola: \t\t" + u );
            return cola.add(u);
        }
    }

    /**
     * Función que hace de interfaz de salida para la cola.
     * Sincronizada para evitar que varios recolectores de temas saquen una url
     * a la vez.
     * @return devuelve (y borra) el elemento más antiguo de la cola (del principio).
     */
    public static URL sacar() {
        synchronized (ColaURL.class) {

            URL u = cola.removeFirst();
            System.out.println("\t<< ("+numURLs()+") Sacado de cola:      \t\t" + u);
            return u;
        }
    }

    /**
     * Función que devuelve el estado actual de la cola
     * @return El número de URLs almacenadas
     */

    public static int numURLs() {
        return cola.size();
    }

}
